//高阶函数
// 高阶函数是指满足以下任一条件的函数：
// 接受一个或多个函数作为参数
// 返回一个函数作为结果

// 面试要点总结
// 定义清晰：能准确说出高阶函数的概念
// 举例恰当：能够举出常见的高阶函数如 map, filter, reduce 等
// 实际应用：能说明在实际开发中的用途，如函数装饰、中间件、事件处理等
// 手写实现：能够写出简单的高阶函数示例
// 高阶函数是函数式编程的重要概念，在现代 JavaScript 开发中非常常见，尤其是在使用 React、Redux 等框架时会频繁遇到。
// map 是一个高阶函数，它接受一个函数作为参数
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(x => x * 2);
console.log(doubled); // [2, 4, 6, 8, 10]

// filter 也是一个高阶函数
const evens = numbers.filter(x => x % 2 === 0);
console.log(evens); // [2, 4]

// 自定义高阶函数示例
function calculate(arr, operation) {
    return arr.reduce(operation);
}

const sum = calculate([1, 2, 3, 4], (a, b) => a + b);
console.log(sum); // 10



// 事件处理器包装器
function withLogging(fn) {
    return function(...args) {
        console.log('Function called with args:', args);
        const result = fn.apply(this, args);
        console.log('Function returned:', result);
        return result;
    };
}

function greet(name) {
    return `Hello, ${name}!`;
}

const loggedGreet = withLogging(greet);
loggedGreet("Alice");
// 输出:
// Function called with args: ['Alice']
// Function returned: Hello, Alice!
// 创建一个工厂函数，返回特定的函数
function createMultiplier(multiplier) {
    return function(number) {
        return number * multiplier;
    };
}

const double = createMultiplier(2);
const triple = createMultiplier(3);

console.log(double(5)); // 10
console.log(triple(5)); // 15

// 柯里化函数也是高阶函数
function add(a) {
    return function(b) {
        return a + b;
    };
}

const addFive = add(5);
console.log(addFive(3)); // 8

